<?php
namespace common\helper;

class CommonHelper
{
    protected $outParams = null;

    public function __construct()
    {

    }

    /**
     * 保留外部变量
     * @param $key
     * @param string $value
     * @return bool
     */
    public function setOutParams($key,$value='')
    {
        if(empty($key)){
            return false;
        }
        if(is_array($key)){
            foreach($key AS $k=>&$v){
                $this->outParams[$k] = $v;
            }
        }else{
            $this->outParams[$key] = $value;
        }
        return true;
    }

    public function unsetOutParams()
    {
        $this->outParams = null;
        return true;
    }

    /**
     * 获取外部变量的数值
     * @param string $key
     * @return null
     */
    public function getOutParams($key='')
    {
        return $key ? $this->outParams[$key] :$this->outParams;
    }
    
    // 校验密码的强度,level=0表示弱密码，level>=1表示安全密码，$level>=2表示强密码
    public function check_password_safe($password, $level=0) {
        if(!strlen($password)){
            return array(
                'code'=>20003,
                'msg'=>'密码不能为空',
            ); 
        }
        // 大写字母
        $pattern_upcase_alphabet='/[A-Z]/';
        // 小写字母
        $pattern_lowercase_alphabet='/[a-z]/';
        // 数字
        $pattern_digit='/[0-9]/';
        $pattern_special_char ='/[_.\-#$%,;=@]/';
        $min_length = 6;
        $first_char = substr($password , 0, 1);
        $pattern_first_char = "/^[$first_char]+$/";
        $check_same_ret = preg_match($pattern_first_char, $password);
        if($check_same_ret){
            return array(
                'code'=>20080,
                'msg'=>'密码不能由相同字符组成',
            ); 
        }
        $arr_forbid = array('admin','654321','123456','123321','123123','password','qwer','fuck');
        foreach($arr_forbid as $_forbid){
            if(preg_match("/{$_forbid}/i",$password)){
                return array(
                    'code'=>20060,
                    'msg'=>"密码含有禁止字符：".$_forbid,
                ); 
            }
        }
        // 安全密码
        if($level >=1 ){
            $min_length = 8;
            if(preg_match("/\s/",$password)) {
                return array(
                    'code'=>20012,
                    'msg'=>'密码不能有空格字符',
                );  
            }
            if(!preg_match($pattern_upcase_alphabet,$password)) {
                return array(
                    'code'=>20020,
                    'msg'=>'密码需要至少一个大写字母',
                );  
            }
            if(!preg_match($pattern_lowercase_alphabet,$password)) {
                return array(
                    'code'=>20030,
                    'msg'=>'密码需要至少一个小写字母',
                ); 
            }
            
        }
        // 高强度
        if($level >=2 ){
            if(!preg_match($pattern_special_char,$password)) {
                return array(
                    'code'=>20050,
                    'msg'=>"密码需要至少一个特殊符号：".str_replace(array("/","[","]"),'',$pattern_special_char),
                ); 
            }
        }
        if(strlen($password) < $min_length) {
            return array(
                'code'=>20010,
                'msg'=>'密码需要至少包含'.$min_length.'个字符',
            );   
        }
        return array(
            'code'=>1,
            'msg'=>'',
        ); 
    }
}